shader LGGreenMarble (
        float DiffuseAmt = 0.6,
        color SpecularColor = color(1.0),
        float SpecularAmt = 0.4,
        float Roughness = 0.01,
        color DarkColor = color(0.01, 0.12, 0.004),
        color LightColor = color(0.06, 0.18, 0.02),
        color VeinColor = color(0.47, 0.57, 0.03),
        float VeinFreq = 1.0,
        float Sharpness = 25.0,
        output  color BSDF=0 )
{
#define snoise(x) (2*noise(x)-1)
    point PP, offset;
    float cmi;
    point Nf;
    color Ct;
    float pixelsize, twice, scale, freq;
    float turbsum, turb, i;
	vector Vector = P;
    PP = transform ("shader", Vector);

    /*
    * First calculate the underlying color of the substrate
    *    Use turbulence - use frequency clamping
    */
    pixelsize = sqrt(area(PP));
    twice = 2 * pixelsize;
    turb = 0;
    for (scale = 1; scale > twice; scale /= 2)
        turb += scale * abs(noise(PP/scale)-0.5);
    if (scale > pixelsize)
        turb += clamp ((scale/pixelsize)-1, 0, 1) * scale * abs(noise(PP/scale)-0.5);

    Ct = mix (DarkColor, LightColor, smoothstep(0.1,.35,turb));

    /*
    * Now we layer on the veins
    */

    /* perturb the lookup */
    freq = 1;
    offset = point(35.2,-21.9,6.25);
    /* This offset makes it uncorrelated to the substrate pattern */
    for (i = 0;  i < 6;  i += 1) {
        offset += (noise (freq * PP) - point(.5,.5,.5))  / freq;
        freq *= 2;
    }
    PP += offset;

    /* Now calculate the veining function for the lookup area */
    turbsum = 0;  freq = 1;
    PP *= VeinFreq;
    for (i = 0;  i < 3;  i += 1) {
        turb = abs (snoise (PP*freq));
float aa = pow (smoothstep (0.8, 1, 1 - turb), Sharpness);
        //turb = pow (smoothstep (0.8, 1, 1 - turb), Sharpness) / freq;
        turbsum += (1-turbsum) * turb;
        freq *= 2;
    }
    turbsum *= smoothstep (-0.1, 0.05, snoise(2*(PP+point(-4.4,8.34,27.1))));

    Ct = mix (Ct, VeinColor, turbsum);

    /*
    * Shade like plastic
    */

    Nf = normalize(N);

    BSDF = Ct;
    //BSDF += SpecularColor * SpecularAmt ;
}